package br.com.financas.business.impl;

import java.util.ArrayList;
import java.util.Collection;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import br.com.base.business.impl.ServiceImpl;
import br.com.base.business.impl.validatores.StringValidator;
import br.com.base.exception.BaseException;
import br.com.base.model.UsuarioBase;
import br.com.financas.business.UsuarioService;
import br.com.financas.exception.NegociosMaisControleException;
import br.com.financas.exception.error.ErrorMensagemEnum;
import br.com.financas.model.Usuario;
import br.com.financas.repository.DAO.UsuarioDAO;
import br.com.financas.repository.filter.FiltroUsuario;

/**
 * 
 * @author Milton Domingues
 *
 */
@Service
public class UsuarioServiceImpl extends ServiceImpl<Usuario, Long, FiltroUsuario, UsuarioDAO> implements UsuarioService {

	@Autowired
	private UsuarioDAO usuarioDAO;

	public UsuarioServiceImpl() {

	}

	@Override
	public UsuarioDAO getRepositorioDAO() {
		return this.usuarioDAO;
	}

	@Override
	public void resolverPerDependencias(Usuario vo, UsuarioBase usuario) {

	}

	@Override
	public void resolverPosDependencias(Usuario vo, UsuarioBase usuario) {

	}

	@Override
	public void resolverPreExcluir(Usuario vo) {

	}

	@Override
	public void tratarDadosEntidade(Usuario vo) {

	}

	@Override
	public void validarAlteracao(Usuario vo) {
		Collection<BaseException> erros = new ArrayList<BaseException>();
		this.validarEntidade(vo, erros);
		if (erros.size() > 0) {
			throw new NegociosMaisControleException(erros);
		}
	}

	private void validarEntidade(Usuario vo, Collection<BaseException> erros) {
		if (StringValidator.isNull(vo.getEmail())) {
			erros.add(new NegociosMaisControleException(ErrorMensagemEnum.ERROR_CAMPO_OBRIGATORIO, "email"));
		}

	}

	@Override
	public void validarExclusao(Usuario vo) {

	}

	@Override
	public void validarInclusao(Usuario vo) {
		Collection<BaseException> erros = new ArrayList<BaseException>();
		this.validarEntidade(vo, erros);
		if (erros.size() > 0) {
			throw new NegociosMaisControleException(erros);
		}
	}

	@Override
	public void validarUnicidade(Usuario vo) {

	}
}
